package com.ssy.lingxi.scheduler.service;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.scheduler.api.model.*;
import org.quartz.JobDetail;
import org.quartz.Trigger;

import java.util.List;

/**
 * Quartz任务相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-07-12
 */
public interface IScheduleTaskService {

    /**
     * 创建定时任务
     * @param taskVO 接口参数
     * @return 定时任务的Id
     */
    Wrapper<Long> createScheduleTask(ScheduleTaskVO taskVO);

    /**
     * 创建永久任务
     * @param taskVO 接口参数
     * @return 定时任务的Id
     */
    Wrapper<Long> createPermanentTask(PermanentTaskVO taskVO);

    /**
     * 查询定时任务信息，如任务已经执行完成，返回空
     * @param queryVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<ScheduleTaskDefinitionVO>> listScheduleTask(ScheduleTaskQueryVO queryVO);

    /**
     * 修改任务的启动时间
     * @param updateVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateScheduleTaskExecTime(ScheduleTaskUpdateExecTimeVO updateVO);

    /**
     * 调用方执行完成定时任务后，通知定时任务模块
     * @param idVO 接口参数
     * @return 通知结果
     */
    Wrapper<Void> deleteScheduleTask(ScheduleTaskIdVO idVO);

    /**
     * 删除已经存在的永久任务
     * @param taskName 任务名称
     * @param taskGroup 任务组
     * @return 删除成功-true，失败-false
     */
    boolean deleteExistPermanentTask(String taskName, String taskGroup);

    /**
     * 删除任务定义，删除Quartz任务
     * @param taskId 任务Id
     * @param taskName 任务名称
     * @param taskGroup 任务组
     */
    void deleteScheduleTask(Long taskId, String taskName, String taskGroup);

    /**
     * 删除Quartz任务
     * @param trigger Quartz触发器
     * @param jobDetail Quartz任务
     */
    void deleteQuartzJob(Trigger trigger, JobDetail jobDetail);
}
